var urlRegxp = /^(?:https?|s?ftp|telnet|ssh|scp):\/\/(?:(?:[\w]+:)?\w+@)?(?:(?:(?:[\w-]+\.)*\w[\w-]{0,66}\.(?:[a-z]{2,6})(?:\.[a-z]{2})?)|(?:(?:25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})))(?:\:\d{1,5})?(?:\/(~[\w-_.])?)?(?:(?:\/[\w-_.]*)*)?\??(?:(?:[\w-_.]+\=[\w-_.]+&?)*)?$/i;
var emailRegxp = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
var imgRegxp = /.+(\.jpg|\.jpeg|\.png|\.gif|\.bmp)$/i;
var err_color = '#ffcc00';
var time = 1.5;

clearField = function(elem, str) {
	if(elem.value==str)	elem.value="";
	elem.setStyle({
		color:'#000000'
	});
}
restoreField = function(elem, str) {
	if(elem.value=="" || elem.value==str) {
		elem.value=str;
		elem.setStyle({
			color:'#999999'
		});
	}
}
goToURL = function(e, base_url, type, elem) {
	var intKey = 0;
	e = (window.event)? event : e;
	intKey = (e.keyCode)? e.keyCode: e.charCode;
	if(elem.value!="" && intKey==13) {
		location.href = base_url+"search/"+type+":"+elem.value;
	}
}
addTag = function(elem, id) {
	elem.insert({after: '<br /><input type="text" name="tag_'+id+'" value="'+id+'">' });
}

loginForm = function(elem) {
	if(elem.username.value=="") {
		new Effect.Highlight(elem.username, {startcolor:err_color, duration:time});
	}
	if(elem.password.value=="") {
		new Effect.Highlight(elem.password, {startcolor:err_color, duration:time});
	}
	return (elem.username.value!="" && elem.password.value!="");
}

articleForm = function(elem) {
	var to_return = true;
	if(elem.title.value=="") {
		new Effect.Highlight(elem.title, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.author.value=="") {
		new Effect.Highlight(elem.author, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.body.value=="") {
		new Effect.Highlight(elem.body, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.no_tags.value=="true") {
		new Effect.Highlight('tag_box', {startcolor:err_color, duration:time});
		to_return = to_return && false;
	} else {
		var inputs = elem.getInputs('checkbox');
		var found = false;
		inputs.each(function(s) {
			if(s.checked) {
				found = true;
			}
		});
		if(!found) {
			new Effect.Highlight('tag_box', {startcolor:err_color, duration:time});
		}
	}
	if(to_return && found) $('wait').show();
	return to_return && found;
}

commentForm = function(elem) {
	var to_return = true;
	if(elem.author.value=="" || elem.author.value=="Autore") {
		new Effect.Highlight(elem.author, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.body.value=="" || elem.body.value=="Messaggio") {
		new Effect.Highlight(elem.body, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

tagForm = function(elem) {
	var inputs = elem.getInputs('text');
	var found = false;
	inputs.each(function(s) {
		if(s.value=="") {
			new Effect.Highlight(s, {startcolor:err_color, duration:time});
			found = true;
		}
	});
	if(!found) $('wait').show();
	return !found;
}

newTagForm = function(elem) {
	var to_return = true;
	if(elem.new_tag.value=="") {
		new Effect.Highlight(elem.new_tag, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

peopleForm = function(elem) {
	var to_return = true;
	if(elem.name.value=="") {
		new Effect.Highlight(elem.name, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.surname.value=="") {
		new Effect.Highlight(elem.surname, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.description.value=="") {
		new Effect.Highlight(elem.description, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.img.value!="") {
		if(!imgRegxp.test(elem.img.value)) {
			new Effect.Highlight(elem.img, {startcolor:err_color, duration:time});
			to_return = to_return && false;
		}
	}
	if(elem.url.value!="") {
		if(!urlRegxp.test(elem.url.value)) {
			new Effect.Highlight(elem.url, {startcolor:err_color, duration:time});
			to_return = to_return && false;
		}
	}
	if(elem.mail.value!="") {
		if(!emailRegxp.test(elem.mail.value)) {
			new Effect.Highlight(elem.mail, {startcolor:err_color, duration:time});
			to_return = to_return && false;
		}
	}
	if(to_return) $('wait').show();
	return to_return;
}

linkForm = function(elem) {
	var to_return = true;
	if(elem.description.value=="") {
		new Effect.Highlight(elem.description, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!urlRegxp.test(elem.url.value)) {
		new Effect.Highlight(elem.url, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

editorialForm = function(elem) {
	var to_return = true;
	if(elem.body.value=="") {
		new Effect.Highlight(elem.body, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.title.value=="") {
		new Effect.Highlight(elem.title, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.author.value=="") {
		new Effect.Highlight(elem.author, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

confirmChangePwd = function(elem) {
	var to_return = true;
	if(elem.old_pwd.value=="") {
		new Effect.Highlight(elem.old_pwd, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.new_pwd.value!=elem.conf_pwd.value || elem.new_pwd.value=="") {
		new Effect.Highlight(elem.conf_pwd, {startcolor:err_color, duration:time});
		new Effect.Highlight(elem.new_pwd, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

configurationForm = function(elem) {
	var to_return = true;
	var integer = /^[1-9][0-9]{0,1}$/;
	var long_integer = /^[1-9][0-9]+$/;
	if(elem.username.value=="") {
		new Effect.Highlight(elem.username, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!integer.test(elem.home_article.value)) {
		new Effect.Highlight(elem.home_article, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.date_format.value=="") {
		new Effect.Highlight(elem.date_format, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!long_integer.test(elem.log_lines.value)) {
		new Effect.Highlight(elem.log_lines, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!integer.test(elem.contents_per_page.value)) {
		new Effect.Highlight(elem.contents_per_page, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!long_integer.test(elem.incipit_chars.value)) {
		new Effect.Highlight(elem.incipit_chars, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.sub_title.value=="") {
		new Effect.Highlight(elem.sub_title, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(elem.description.value=="") {
		new Effect.Highlight(elem.description, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!integer.test(elem.autocompleter_results.value)) {
		new Effect.Highlight(elem.autocompleter_results, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!integer.test(elem.search_num_chars.value)) {
		new Effect.Highlight(elem.search_num_chars, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!emailRegxp.test(elem.mail.value)) {
		new Effect.Highlight(elem.mail, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(!integer.test(elem.recover_delay.value)) {
		new Effect.Highlight(elem.recover_delay, {startcolor:err_color, duration:time});
		to_return = to_return && false;
	}
	if(to_return) $('wait').show();
	return to_return;
}

passwordForm = function(elem) {
	if(elem.password.value!=elem.conf_password.value || elem.password.value=="") {
		new Effect.Highlight(elem.conf_password, {startcolor:err_color, duration:time});
		new Effect.Highlight(elem.password, {startcolor:err_color, duration:time});
		return false;
	} else {
		$('wait').show();
		return true;
	}
}

recoveryForm = function(elem) {
	if(elem.username.value=="") {
		new Effect.Highlight(elem.username, {startcolor:err_color, duration:time});
		return false;
	} else {
		$('wait').show();
		return true;
	}
}

toggleCheckbox = function(control, elem) {
	var inputs = $(elem).getInputs('checkbox');
	inputs.each(function(s) {
		s.checked = control.checked;
	});
	$(control).next().innerHTML = (control.checked)? "Deseleziona tutti" : "Seleziona tutti";
}

confirmReset = function(elem) {
	var inputs = elem.getInputs('checkbox');
	var found = false;
	inputs.each(function(s) {
		if(s.checked) {
			found = true;
		}
	});
	if(!found) {
		new Effect.Highlight('reset_box', {startcolor:err_color, duration:time});
		return false;
	} else {
		var incipit = "";
		if(elem.tag.checked && !elem.content.checked) {
			incipit = "Hai scelto di eliminare gli argomenti ma di mantenere gli articoli. "+
				"Così facendo tutti gli articoli perderanno i riferimenti agli argomenti che stai per "+
				"cancellare. ";
		}
		var agree = confirm("Attenzione. "+incipit+"L'operazione non è reversibile. "+
			"Si desidera continuare?");
		return agree;
	}
}

showCommentDate = function(index) {
	//var date = elem.ancestors()[0].previousSiblings()[1].descendants()[0];
	//date.show();
	var date = $$('span.comment_date')[index];
	new Effect.Appear(date, {duration:.3});
}

hideCommentDate = function(index) {
	//var date = elem.ancestors()[0].previousSiblings()[1].descendants()[0];
	var date = $$('span.comment_date')[index];
	date.hide();
}

showInfo = function(elem) {
	var action;
	if(elem.href=="http://webmail.philomousia.it/") {
		action = "webmail";
	} else if(elem.href=="http://www.google.com/analytics/it-IT/") {
		action = "webstat";
	} else {
		action = elem.href.substr(elem.href.lastIndexOf("/")+1, elem.href.length-1);
	}
	
	var text = "";
	var bottom = "";
	switch(action) {
		case "editorial":
		text = "Modifica l'editoriale mostrato in Home Page. L'editoriale "+
			"sostituito, anche se non più visibile, verrà "+
			"comunque mantenuto in memoria.";
		break;
		case "article":
		text = "Aggiungi un nuovo articolo in &Phi;lomousia.";
		break;
		case "person":
		text = "Aggiungi la descrizione di una persona. Il risultato sarà visibile "+
			"nella sezione <span class=\"italic\">Gruppo</span>.";
		break;
		case "file":
		text = "Carica un file nei server &Phi;lomousia. Sono ammessi solo "+
			"immagini, video (in vario formato) e file pdf.";
		break;
		case "preferences":
		text = "Modifica alcuni degli aspetti di configurazione di &Phi;lomousia.";
		break;
		case "link":
		text = "Aggiungi un collegamento (URL) ad un sito. Il risultato sarà visibile "+
			"nella sezione <span class=\"italic\">Collegamenti</span>.";
		break;
		case "reset":
		text = "Elimina tutti i dati salvati in &Phi;lomousia. Articoli, editoriali, "+
			"collegamenti, persone, argomenti, preferenze, file, commenti e log di sistema.";
		break;
		case "password":
		text = "Cambia la password di accesso al pannello di amministrazione (questa pagina). Per completare "+
			"l'operazione sarà richiesta la password correntemente in uso.";
		break;
		case "tag":
		text = "Aggiungi, modifica o elimina gli argomenti (tag) che potranno essere associati agli articoli inseriti. "+
			"Le modifiche verranno applicate anche agli eventuali articoli già presenti.";
		break;
		case "webstat":
		text = "Visualizza le statistiche di &Phi;lomousia tramite Google Analytics. Per accedere utilizzare le segenti credenziali: "+
			"admin@philomousia.it, fast4cap";
		break;
		case "delete":
		text = "Visualizza tutti i file caricati in &Phi;lomousia e scegli quale eliminare.";
		break;
		case "banner":
		text = "Visualizza e distribuisci i banner promozionali di &Phi;lomousia.";
		break;
		default:
		text = "Azione "+action+" non riconosciuta";
	}
	$('info_body').innerHTML = "<p>"+text+"</p>";
	$('info_bottom').innerHTML = "<p>"+elem.innerHTML+"</p>";
	
	/*Element.clonePosition('info', $(elem), {
		setWidth:false,
		setHeight:false,
		offsetTop:60-parseInt($('info').getHeight()),
		offsetLeft:parseInt(elem.getWidth())
	});*/
	var t = $(elem).positionedOffset()[1]-parseInt($('info').getHeight())+parseInt($(elem).getHeight())+10;
	var l = $(elem).positionedOffset()[0]+parseInt($(elem).getWidth());
	
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	//$('info').show();
	new Effect.Appear('info', {duration:.3});
}

hideInfo = function(elem) {
	$('info').hide();
	//new Effect.Fade('info', {duration:.2});
}

showWaitAdvice = function(elem) {
	$('info_body').innerHTML = "<p>Attendere. L'operazione potrebbe durare a lungo, a seconda della grandezza del file e della "+
		"tua velocità di upload. <span class=\"highline\">Non chiudere questa finestra</span>. Nel frattempo puoi comunque "+
		"consultare &Phi;lomousia usando nuove finestre del browser.</p>";
	$('info_bottom').innerHTML = "<p>Upload file</p>";
	var t = $(elem).positionedOffset()[1]-parseInt($('info').getHeight())+parseInt($(elem).getHeight())+20;
	var l = $(elem).positionedOffset()[0]+parseInt($(elem).getWidth());
	
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	$('info').show();
	$('wait').show();
	setTimeout('$(\'upload_form\').submit()', 500);
}

showHelper = function(elem) {
	$('info_body').innerHTML = "<p>Inserisci almeno tre caratteri e poi seleziona l'articolo desiderato</p>";
	$('info_bottom').innerHTML = "<p>Cerca articolo</p>";
	var t = $(elem).positionedOffset()[1]-parseInt($('info').getHeight())+parseInt($(elem).getHeight())+20;
	var l = $(elem).positionedOffset()[0]+parseInt($(elem).getWidth())/8;
	
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	//$('info').show();
	new Effect.Appear('info', {duration:.3});
	setTimeout('new Effect.Fade(\'info\', {duration:.3})', 1500);
}

showEditorHelp = function(elem) {
	var action = elem.alt;
	var output = "";
	switch(action) {
		case "img":
		output = "Inserisci un'immagine.";
		break;
		case "link":
		output = "Inserisci un link, il collegamento dovrà essere un URL valido (i.e. "+
			"<span class=\"italic\">http://www.sito.com</span>).";
		break;
		case "youtube":
		output = "Inserisci un video da YouTube. Il collegamento dovrà essere un URL YouTube "+
			"valido (i.e. <span class=\"italic\">http://www.youtube.com/watch?v=xxxxxxx</span>)";
		break;
		case "bold":
		output = "Trasforma il testo selezionato in <span class=\"bold\">grassetto</span>.";
		break;
		case "italic":
		output = "Trasforma il testo selezionato in <span class=\"italic\">corsivo</span>.";
		break;
		case "underline":
		output = "Sottolinea il <span class=\"underline\">testo selezionato</span>.";
		break;
		case "delete":
		output = "Depenna il <span class=\"delete\">testo selezionato</span>.";
		break;
		case "highline":
		output = "Evidenzia il <span class=\"highline\">testo selezionato</span>.";
		break;
		case "color":
		output = "Colora il <span style=\"color:#f00\">testo selezionato</span>. Dovrai inserire il "+
			"colore come codice esadecimale (i.e. <span class=\"italic\">#ff0000</span>).";
		break;
		case "size":
		output = "Scegli la dimensione del testo (valori da 10 a 39).";
		break;
		case "ulist":
		output = "Inserisci una lista non ordinata di elementi.";
		break;
		case "olist":
		output = "Inserisci una lista ordinata di elementi.";
		break;
		case "quote":
		output = "Inserisci una citazione.";
		break;
		case "left":
		output = "Allinea il testo a sinistra.";
		break;
		case "right":
		output = "Allinea il testo a destra.";
		break;
		case "center":
		output = "Allinea il testo al centro.";
		break;
		default:
		output = "Azione non riconosciuta";
		break;
	}
	$('info_body').innerHTML = "<p>"+output+"</p>";
	$('info_bottom').innerHTML = "<p>&Phi;lomousia</p>";
	var t = $(elem).positionedOffset()[1]-parseInt($('info').getHeight())+parseInt($(elem).getHeight())+20;
	var l = $(elem).positionedOffset()[0]+parseInt($(elem).getWidth());
	
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	//$('info').show();
	new Effect.Appear('info', {duration:.3});
}

hideEditorHelp = function(elem) {
	$('info').hide();
}

showImageChooser = function(elem) {
	var t = $(elem).positionedOffset()[1]+parseInt($(elem).getHeight());
	var l = $(elem).positionedOffset()[0]-75;
	$('image_chooser').setStyle({
		top:t+'px',
		left:l+'px'
	});
	
	new Effect.Appear('image_chooser', {duration:.3});
}

showImagePreview = function(img) {
	$('info_body').innerHTML = '<p><img src="'+img+'" alt="immagine" /></p>';
	$('info_bottom').innerHTML = "<p>"+img.substr(img.lastIndexOf("/")+1, img.length)+"</p>";
	
	var l = parseInt($('uploaded').positionedOffset()[0])+parseInt($('uploaded').getWidth())/1.5;
	var t = $('uploaded').positionedOffset()[1]-$('info').getHeight()+$('uploaded').getHeight()-45;
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	
	new Effect.Appear('info', {duration:.3});
}

hideImagePreview = function() {
	//Event.stop(event);
	$('info').hide();
}

showDelete = function(elem) {
	$('info_body').innerHTML = "<p>Premi il tasto sinistro del mouse per eliminare questo file.</p>";
	$('info_bottom').innerHTML = "<p>Elimina file</p>";
	var t = $(elem).positionedOffset()[1]-elem.getHeight()-70;
	var l = $(elem).positionedOffset()[0]+elem.getWidth();
	
	$('info').setStyle({
		top:t+'px',
		left:l+'px'
	});
	//$('info').show();
	new Effect.Appear('info', {duration:.3});
}

hideDelete = function(elem) {
	$('info').hide();
}

slideHelper = function() {
	var l = $('info').positionedOffset()[0]+5;
	$('info').setStyle({
		left:l+'px'
	});
}

deleteArticle = function(elem) {
	if(confirm("L'azione non è reversibile. Sicuro di voler continuare?")) {
		$(elem).submit();
	}
}

showPreview = function(txt, url) {
	if($F(txt)=="") {
		new Effect.Highlight($(txt), {startcolor:err_color, duration:time});
	} else {
		new Ajax.Updater('preview_body', url+"preview", {
			parameters: { text: $F(txt) },
			onLoading: $('wait').show(),
			onSuccess: $('wait').hide()
		});
		new Effect.Appear($('preview'), {duration:.3});
	}
}

updateCalendar = function(pivot, url) {
	new Effect.Fade('calendar_body', { queue:'front', duration:.2 });
	new Ajax.Updater('calendar_body', url+"calendar", {
		parameters: { timestamp: pivot },
		onLoading: $('wait').show(),
		onSuccess: $('wait').hide()
	});
	new Effect.BlindDown('calendar_body', { queue:'end', duration:.5 });
}

selectLogEntry = function(elem) {
	//new Effect.Morph(elem, {style: {backgroundColor:'#fc9'}, duration:.2});
	/*elem.setStyle({
		backgroundColor:'#fc0'
	});*/
	elem.addClassName('highline');
}

normalizeLogEntry = function(elem) {
	//new Effect.Morph(elem, {style: {backgroundColor:'#ffc'}, duration:.2});
	/*elem.setStyle({
		backgroundColor:'#ffc'
	});*/
	elem.removeClassName('highline');
}